package com.sc.nft.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.dto.AddDigitalCollectionDTO;
import com.sc.nft.dto.CirculateDetailsDTO;
import com.sc.nft.dto.SimpleDigitalGetSeparateFundDTO;
import com.sc.nft.dto.UpdateDigitalCollectionDTO;
import com.sc.nft.entity.DigitalCollection;
import com.sc.nft.entity.dto.AccessToCopyrightCollectioDTO;
import com.sc.nft.entity.dto.CollectionListAccordingDaoDTO;
import com.sc.nft.entity.dto.DigitalcollectionByUserCreatorIdDTO;
import com.sc.nft.entity.dto.MallDaoCollectionDTO;
import com.sc.nft.entity.vo.*;
import com.sc.nft.enums.DigitalMarketTypeEnum;
import com.sc.nft.enums.SaasTaskTypeEnum;

import java.util.List;

/**
 * 藏品表服务接口
 *
 * @author zxy
 * @description 由 Mybatisplus Code Generator 创建
 * @since 2022-06-03 15:46:04
 */
public interface DigitalCollectionService {


    /**
     * 商城获取dao用户下的藏品
     * @param mallDaoCollectionDTO
     * @return MallCollectionVO
     */
    IPage<MallCollectionVO> pageDaoCollection(MallDaoCollectionDTO mallDaoCollectionDTO);


    void addCollection(AddDigitalCollectionDTO addDigitalCollectionDTO);

    /**
     * 根据标题查询
     *
     * @param firstTitle
     * @return
     */
    DigitalCollection getByTitle(String firstTitle);

    /**
     * 分页查询
     *
     * @param firstTitle
     * @return
     */
    Page<DigitalCollectionVO> page(String firstTitle, Long userCreatorId, Long catenaId, int pageNo, int pageSize, DigitalMarketTypeEnum collectionType, Long searchId);

    /**
     * 简单列表用于下拉
     *
     * @param firstTitle
     * @return
     */
    List<DigitalCollection> simpleList(String firstTitle, Long userCreatorId);

    /**
     * 可合成的藏品列表
     *
     * @param firstTitle
     * @param isPrivilege
     */
    Page<PageSynthesisCollectionVO> pageSynthesisCollection(int pageNo, int pageSize, String firstTitle, Boolean isPrivilege);

    Page<CollectionSimpleVO> pageRelatedCollections(String firstTitle, int pageNo, int pageSize);

    /**
     * @description: 后台修改藏品信息
     * @author: rdg
     * @date: 2022/8/23 10:56
     * @param: [digitalCollection]
     * @return: void
     **/
    void updateDigitalCollection(UpdateDigitalCollectionDTO updateDigitalCollectionDTO);

    /**
     * 根据创作者id,获取列表
     *
     * @param digitalcollectionByUserCreatorId
     * @return
     */
    Page<HomePageDigitalCollectionProductVO> digitalcollectionByUserCreatorId(DigitalcollectionByUserCreatorIdDTO digitalcollectionByUserCreatorId);


    /**
     * 后台获取dao发行藏品数据
     *
     * @param id
     * @return
     */
    List<GetAdminCollectionVO> getCollectionList(Long id);

    /**
     * 藏品初始化上链
     *
     * @param collection
     */
    void collectionInitChain(DigitalCollection collection);

    /**
     * 根据daoId获取藏品列表
     *
     * @param collectionListAccordingDaoDTO
     * @return
     */
    Page<CollectionListAccordingDaoVO> getCollectionListAccordingDao(CollectionListAccordingDaoDTO collectionListAccordingDaoDTO);

    /**
     * 根据daoId获取藏品列表
     *
     * @param userCreatorId
     * @return
     */
    Page<BoxCollectionByUserCreatorIdVO> boxCollectionByUserCreatorId(Long userCreatorId, Integer pageNo, Integer pageSize);

    /**
     * 获取自由市场的藏品列表
     *
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AdminPageFreeMarketCollectionVO> getAdminPageFreeMarketCollection(Integer pageNo, Integer pageSize, String firstTitle);

    /**
     * 获取自由市场的藏品列表
     *
     * @param id
     * @return
     */
    GetDetailsBasedOnTheCollectionIdVO getDetailsBasedOnTheCollectionId(Long id);


    /**
     * 分页获取所有的藏品列表
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<CollectionSimpleVO> getPageCollection(Integer pageNo, Integer pageSize, String firstTitle);

    /**
     * 分页获取所有的二级市场藏品列表
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<CollectionSimpleVO> getPageSecondaryMarketCollection(Integer pageNo, Integer pageSize);

    List<AccessToCopyrightCollectionVO> accessToCopyrightCollection(AccessToCopyrightCollectioDTO accessToCopyrightCollectioDTO);

    List<AccessToCopyrightCollectionVO> collectionBindingCity(AccessToCopyrightCollectioDTO accessToCopyrightCollectioDTO);

    /**
     * 根据类型分页获取藏品列表
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<CollectionSimpleVO> getCollectionPageByCollectionType(Integer pageNo, Integer pageSize);

    /**
     * 简单的藏品列表 按照类型分页查询
     * @param collectionType
     * @param firstTitle
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<SimpleListByCollectionTypeVO> simpleListByCollectionType(Integer collectionType, String firstTitle, Integer pageNo, Integer pageSize, Long daoId);

    IPage<CollectionSimpleVO> collectionSimpleListPage(String firstTitle, Long userCreatorId, Page mp, SaasTaskTypeEnum typeEnum);

    /**
     * 大盘交易 （仅盯链）
     * @return
     */
    List<LargeDiskAccessVO> largeDiskAccess();

    /**
     * 流转详情
     * @param id
     * @return
     */
    CirculateDetailsDTO circulateDetails(Long id);

    /**
     * 简单藏品列表全部数据
     * @return
     */
    List<SimpleListByCollectionTypeVO> simpleListByCollectionAll(SaasTaskTypeEnum typeEnum);


    /**
     * 根据藏品id集合获取藏品
     * @param releaseCollections
     * @return
     */
    List<DigitalCollection> getCollectionListById(List<Long> releaseCollections);

    /**
     * 获取给本dao分过账的数据
     * @param daoId
     * @return
     */
    List<SimpleDigitalGetSeparateFundDTO> getDaoSeparateFund(Long daoId);


    /**
     * 根据藏品类型 查询藏品
     * @param digitalMarketTypeEnum
     * @return
     */
    List<DigitalCollection> findListByDigitalMarketType(DigitalMarketTypeEnum digitalMarketTypeEnum);
}
